import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.util.List;
import java.util.ArrayList;
/**
 * Write a description of class Batman here.
 * 
 * @author (Alberto Navarro) 
 * @version (1.15)
 */
public class Spiderman extends Usuario
{
    /**
     * Act - do whatever the Batman wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
    private int direccionx;
    private int direcciony;
     private String dibujo[];
    private int dibujo_act;
    private int aux;
    private int activa;
    private Actor tocaRed;
    private Actor tocaCuerda;
    private int arriba;
    
      public  Spiderman()
    {
      dibujo=new String[29];
      dibujo[0]="spider1c.gif";//comienza spider man caminar
      dibujo[1]="spider2c.gif"; 
      dibujo[2]="spider3c.gif";
      dibujo[3]="spider4c.gif";
      dibujo[4]="spider5c.gif";
      dibujo[5]="spider6c.gif";
      dibujo[6]="spider7c.gif";
      dibujo[7]="spider8c.gif";
      dibujo[8]="spider9c.gif";
      dibujo[9]="spider10c.gif";
      dibujo[10]="spider11c.gif";
      dibujo[11]="spider12c.gif";// termina caminar
      dibujo[12]="spiderb1.gif";//empieza brinco
      dibujo[13]="spiderb2.gif";
      dibujo[14]="spiderb3.gif";
      dibujo[15]="spiderb4.gif";
      dibujo[16]="spiderb5.gif";
      dibujo[17]="spiderb6.gif";
      dibujo[18]="spiderb7.gif";
      dibujo[19]="spiderb8.gif";
      dibujo[20]="spiderb9.gif";
      dibujo[21]="spiderb10.gif";//termina brinco
      dibujo[22]="spiderd1.gif";//empieza disparo
      dibujo[23]="spiderd2.gif";
      dibujo[24]="spiderd3.gif";
      dibujo[25]="spiderd4.gif";
      dibujo[26]="spiderd5.gif";
      dibujo[27]="spiderd6.gif";
      dibujo[28]="spiderd7.gif";//termina disparo
      this.activa=1;
      
      this.dibujo_act=0;
      this.aux=0;
      this.direcciony=0;
       
    }
      
    public void act() 
    {
       mueve_usuario();
    }
 
       public boolean Gravedad()
    {    
         Actor mosaico;
                           
         List piso =  super.getWorld().getObjectsAt(this.getX(),  this.getY()+40, Plataforma.class);
               if(!piso.isEmpty())
        {
           return (true);
        }
          else
          {
        if (this.getY()<550)
            this.setLocation(this.getX(), this.getY()+5);
            return(false);
          }
    }
    
    public void mueve_usuario()
    {
       World mundo=getWorld();
         
           if(Greenfoot.isKeyDown("c"))//dispara la bola de spider man para golpear
             { 
                 super.Cambia_Activo();
             }
            
         
       tocaRed=this.getOneObjectAtOffset(0,30,Red.class);//compara si existe red para poder caminar sobre ella
       if(tocaRed==null)//
       {
       this.Gravedad();
       }
       
       tocaCuerda=this.getOneObjectAtOffset(0,-40,Cuerda.class);//compara si existe red para poder caminar sobre ella
       if(tocaCuerda!=null)//
       {
        arriba=1;
       }
       else
       {arriba=0;
        }
      
     if(super.variable()==1)//si se activa se movera el objeto
     {
         GreenfootImage imagen;
       
       this.setImage(this.dibujo[this.dibujo_act]);
       if(direccionx== 1)//checa la direccion y pone la imagen
        {
            imagen=this.getImage();
            imagen.mirrorHorizontally();
            this.setImage(imagen); 
        }
       imagen=this.getImage();
      
        if(Greenfoot.isKeyDown("space"))// dispara la red para que se camine sobre ella
             { 
             
                 if(this.direccionx==0)
                 {
                 Red Bala=new Red(this.getX()+80,this.getY(),this.direccionx);
                 getWorld().addObject(Bala,this.getX()+50,this.getY()+45);
                 }
                 if(this.direccionx==1)
                 {
                 Red Bala=new Red(this.getX()-80,this.getY(),this.direccionx);
                 getWorld().addObject(Bala,this.getX()-50,this.getY()+45);
                 }
             }
            else if(Greenfoot.isKeyDown("d"))//dispara la bola de spider man para golpear
             { 
                 this.aux=2;
                 this.dibujo_act=22;
                 if(this.direccionx==0)
                 {
                 Disparo ds=new Disparo(this.getX()+80,this.getY(),this.direccionx,0);
                 getWorld().addObject(ds,this.getX()+50,this.getY());
                 }
                 if(this.direccionx==1)
                 {
                 Disparo ds=new Disparo(this.getX()-80,this.getY(),this.direccionx,0);
                 getWorld().addObject(ds,this.getX()-50,this.getY());
                 }
             }
              
               else if(Greenfoot.isKeyDown("up") && this.aux ==0 && arriba==1)
               { 
                this.aux=1;
                this.dibujo_act=12;
                 
               }
               else if (this.aux==1 &&  this.dibujo_act>11 && this.dibujo_act<=16)//animacion brinco arriba
               {
                   
                   this.setLocation(this.getX(),this.getY()-15);
                   this.dibujo_act++;
                }
                else if (this. aux==1 &&  this.dibujo_act>16 && this.dibujo_act<21)//animacion brinca abajo
                {
                     this.setLocation(this.getX(),this.getY()-15);
                     this.dibujo_act++;
                }
                else if (this. aux==2 &&  this.dibujo_act>21 && this.dibujo_act<28)//animacion del disparo
                {
                     this.dibujo_act++;
                }
                
                else  if(this.dibujo_act==11)//termina el caminar
                {
                    this.dibujo_act=0;
                }
                else if(this.dibujo_act==21)//termina el brinco
                 {
                  this.dibujo_act=0;
                  this.aux=0;
                 }
                 else if(this.dibujo_act==28)//termina el disparo
                 {
                  this.dibujo_act=0;
                  this.aux=0;
                 }
        else if (Greenfoot.isKeyDown("right") && this.aux==0)//camina hacia la derecha
       {
           move(4);
           direccionx=0;
           this.dibujo_act++;
       }
       else if(Greenfoot.isKeyDown("left")&& this.aux==0)//camina hacia la izquierda
       {
           move(-4);
           direccionx=1;
           this.dibujo_act++;
                      
       }
    }
     if(this.getY()>550)//si se cae pierde
        {
            ((Mundo)mundo).regresa_todo();
        }
    }
}
